Description

Field Validator that checks if the date supplied is within a specific range.

NOTE: If no date converter is specified, XWorkBasicConverter will kick in to do the date conversion, which by default using the Date.SHORT format using the locale specified in webwork.properties else falling back to the system default locale.

Tips when validation doesn't work as expected
  • As indicated in the Note above, if validation doesn't operate as expected, one should probably check if there's an exception, such as follows being logged.
    WARN (com.opensymphony.xwork.util.OgnlUtil:370) - Caught OgnlException while setting property 'min' on type 
    'com.opensymphony.xwork.validator.validators.DateRangeFieldValidator'.
    java.lang.NoSuchMethodException: setMin(java.lang.String)
            at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:824)
            at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:978)

    It indicates that the expression set to one of the properties, 'min', cannot be converted by WebWork meaningfully to a Date object.

  • Another possible check would be to have the box hosting the application to execute the following Java program, it could well be just a simple jsp with scriplet in it, just to print out the date format of the box.
    Date d  = new Date();
     SimpleDateFormat sdf = (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.SHORT);
     System.out.println(sdf.format(d));

    If the date printed out is in dd/MM/yyyy format for example, we should use that format when setting 'min' or/and 'max' properties of the DateRangeValidator

Parameters

  • fieldName - The field name this validator is validating. Required if using Plain-Validator Syntax otherwise not required
  • min - the min date range. If not specified will not be checked.
  • max - the max date range. If not specified will not be checked.

Examples

<validators>
		<!-- Plain Validator syntax -->
		<validator type="date">
	        <param name="fieldName">birthday</param>
          <param name="min">01/01/1990</param>
          <param name="max">01/01/2000</param>
          <message>Birthday must be within ${min} and ${max}</message>
		</validator>

      <!-- Field Validator Syntax -->
      <field name="birthday">
      	<field-validator type="date">
       	    <param name="min">01/01/1990</param>
              <param name="max">01/01/2000</param>
              <message>Birthday must be within ${min} and ${max}</message>
      	</field>
      </field>

</validators>